<?php

declare(strict_types=1);
/**
 * This file is part of habo_new_media.
 *
 * @link     https://www.berlen.cn/
 * @contact  tech@berlen.cn
 * @license  http://gitlab.rehou.cn/habo/habo_new_media/-/blob/master/README.md
 */
namespace app\service\token;

use app\model\MediaTokenModel;
use think\Model;

interface TokenInterface
{
    /**
     * 获取执行redis_key.
     */
    public function getListKey(): string;

    /**
     * 获取媒体app-token列表.
     * @param int $status 状态1有效  2失效
     */
    public function getMediaAppTokenList(int $status = 0): array;

    /**
     * 获取value.
     * @param array $value token数据
     * @return false|string
     */
    public function getListValue(array $value = []);

    /**
     * 获取token.
     * @param array $tokenData token数据
     */
    public function getToken(array $tokenData = []): string;

    /**
     * 获取token key.
     * @param array $tokenData token数据
     */
    public function getTokenKey(array $tokenData = []): string;

    /**
     * 验证token和账户是否有效.
     * @param MediaTokenModel $model 模型
     * @param int $accountId 账户id
     */
    public function checkTokenAccount(MediaTokenModel $model, int $accountId = 0): bool;

    /**
     * 设置token账户关系.
     * @param int $tokenId token_id
     * @param int $accountId 账户id
     */
    public function setTokenAccount(int $tokenId = 0, int $accountId = 0): bool;

    /**
     * 删除token账户关系.
     * @param int $tokenId token_id
     * @param int $accountId 账户id
     */
    public function delTokenAccount(int $tokenId = 0, int $accountId = 0): bool;

    /**
     * 验证token是否有效.
     * @param MediaTokenModel $model 模型
     */
    public function checkTokenStatus(MediaTokenModel $model): bool;

    /**
     * 修改token数据.
     * @param MediaTokenModel $model 模型
     * @param array $params 修改参数
     */
    public function updateTokenData(MediaTokenModel $model, array $params = []): bool;

    /**
     * 根据refresh_token刷新token.
     * @param Model $model
     * @return bool
     */
    public function refreshToken(Model $model): bool;
}
